home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / language / gemfsc18.lzh / AESSRC18.LZH / AESFUNCS / FSLDIALO.C < prev    next >
C/C++ Source or Header  |  1992-03-27  |  4KB  |  134 lines

  1. /**************************************************************************
  2.  * FSLDIALO.C - fsl_dialog(): conduct complete fsel_exinput dialog.
  3.  *
  4.  *  02/29/92 -  v1.8
  5.  *              Renamed and made this a gemfast routine.
  6.  *************************************************************************/
  7.  
  8. #include <osbind.h>
  9. #include "gemfast.h"
  10.  
  11. #ifndef NULL
  12.   #define NULL 0L
  13. #endif
  14.  
  15. #ifndef TRUE
  16.   #define TRUE  1
  17.   #define FALSE 0
  18. #endif
  19.  
  20. static void build_fullname(outpath, inpath, force_fname)
  21.     register char *outpath;
  22.     register char *inpath;
  23.     char          *force_fname;
  24. {
  25.     register char *name_node = outpath;
  26.     register char c;
  27.     
  28.     while ('\0' != (*outpath++ = (c = *inpath++))) {
  29.         if (c == '\\') {
  30.             name_node = outpath;
  31.         }
  32.     }
  33.     --outpath;
  34.  
  35.     if (*(outpath-1) == '\\') {
  36.         strcpy(outpath, "*.*");
  37.     }
  38.  
  39.     if (force_fname != NULL) {
  40.         strcpy(name_node, force_fname);
  41.     }
  42.  
  43. }
  44.  
  45. int fsl_dialog(options, pfullname, ppath, pwild, pprompt)
  46.     int             options;
  47.     char           *pfullname;
  48.     register char  *ppath;
  49.     char           *pwild;
  50.     char           *pprompt;
  51. {
  52.     int             button;
  53.     int             add_delim;
  54.     char            fpath[128];
  55.     static char    *lastpath;
  56.     static char     internal_path[128];
  57.     static char     fname[14];
  58.  
  59.     /*---------------------------------------------------------------------
  60.      * a little setup...
  61.      *-------------------------------------------------------------------*/
  62.     
  63.     if (pfullname == NULL) {        /* this parameter is not optional    */
  64.         return FALSE;               /* naughty caller...                 */
  65.     }
  66.     
  67.     if (options & FSL_PATHONLY) {     /* if the caller wants pathname only */
  68.         options |= FSL_FNOPTIONAL;    /* that implies filename optional    */
  69.     }
  70.     
  71.     /*---------------------------------------------------------------------
  72.      * If we were given a path, use it, else use the internal path buffer.
  73.      * if the path is an empty string, init it to the current dev/path.
  74.      * If the path we're using is not the same as last time we were
  75.      * called, nuke the last filename so it doesn't show in the fsel.
  76.      *-------------------------------------------------------------------*/
  77.  
  78.     if (ppath == NULL) {
  79.         ppath = internal_path;
  80.     }
  81.     
  82.     if (ppath != lastpath) {
  83.         fname[0] = '\0';
  84.     }
  85.     lastpath = ppath;
  86.  
  87.     if (*ppath == '\0') {
  88.         ppath[0] = 'A' + (int)Dgetdrv();
  89.         ppath[1] = ':';
  90.         Dgetpath(&ppath[2], 0);
  91.         strcat(ppath, "\\");
  92.     }
  93.     
  94.     build_fullname(fpath, ppath, pwild);
  95.     
  96.     /*---------------------------------------------------------------------
  97.      * if we weren't given a prompt, supply a reasonable default.
  98.      *-------------------------------------------------------------------*/
  99.      
  100.     if (pprompt == NULL) {
  101.         pprompt = (options & FSL_PATHONLY) ? "Select Path" : "Select File";
  102.     }
  103.  
  104.     /*---------------------------------------------------------------------
  105.      * do the dialog.  if the user cancelled, or if the user didn't 
  106.      * select a filename when a filename is required, return FALSE;
  107.      *-------------------------------------------------------------------*/
  108.      
  109.     fsel_exinput(fpath, fname, &button, pprompt);
  110.  
  111.     if (button == 0 || (fname[0] == '\0' && !(options & FSL_FNOPTIONAL))) {
  112.         return FALSE;
  113.     }
  114.  
  115.     /*---------------------------------------------------------------------
  116.      * copy the path from the fsel to the permenant copy for next time.
  117.      * if we were only looking for a pathname, nuke any filename
  118.      * the user might have selected.  build the full name into the caller's 
  119.      * return value buffer, and return TRUE.
  120.      *-------------------------------------------------------------------*/
  121.      
  122.     strcpy(ppath, fpath);
  123.     
  124.     if (options & FSL_PATHONLY) {
  125.         fname[0] = '\0';    
  126.     }
  127.     
  128.     build_fullname(pfullname, fpath, fname);
  129.  
  130.     return TRUE;
  131. }
  132.  
  133.  
  134.